import sys

import pandas as pd#解释pandas库:数据处理库
from PyQt6.QtWidgets import QWidget, QFileDialog, QTableWidgetItem, QLineEdit, QPushButton, QTableWidget, QVBoxLayout, \
    QLabel, QApplication


class GeoApp(QWidget):
    def __init__(self):
        super().__init__()#继承父类的构造方法
        self.initUI()#调用自己的构造方法/

    # def import_excel(self):
    #     import_excel(self)
    def import_excel(self):
        file_path, _ = QFileDialog.getOpenFileName(self, "选择 Excel 文件", "C:\\", "Excel Files (*.xlsx)")
        # 解释:打开文件对话框
        if file_path:
            self.df = pd.read_excel(file_path)  # 解释:读取Excel文件
            self.table.setRowCount(len(self.df))  # 解释:表格的行数
            for row in range(len(self.df)):  # 解释:遍历行
                for col in range(len(self.df.columns)):  # 解释:遍历列
                    self.table.setItem(row, col, QTableWidgetItem(str(self.df.iat[row, col])))
                    # 解释:设置表格的单元格 几个参数:行,列,单元格内容
                    # 解释:df.iat[row, col]是pandas库的方法,用于获取DataFrame的某个单元格的值

    # def calculate(self):
    #     calculate(self)
    def calculate(self):
        # 读取参数
        density = float(self.param1.text())  # 解释:获取文本框的值
        depth = float(self.param2.text())
        pressure = density * depth * 9.8  # 解释:计算压力=密度*深度*重力加速度
        self.table.setItem(0, 2, QTableWidgetItem(f"{pressure:.2f}Pa"))  # 解释:设置表格的单元格 几个参数:行,列,单元格内容

    def save_edit(self, row, col):
        self.df.iat[row, col] = self.table.item(row, col).text()
        # def save_edit(self,row,col):



    def initUI(self):#构造方法
        # 上半部分：参数输入
        self.param1 = QLineEdit("密度 (kg/m³)")#文本框
        self.param2 = QLineEdit("深度 (m)")
        self.btn_calculate = QPushButton("计算")#按钮

        self.btn_import =QPushButton("导入 Excel")#按钮2


        # 下半部分：表格
        self.table = QTableWidget()#表格
        self.table.setColumnCount(3)#解释:表格的列数
        self.table.setHorizontalHeaderLabels(["参数", "输入值", "计算结果"])#解释:表格的列名

        # 事件绑定
        self.btn_import.clicked.connect(self.import_excel)#解释:按钮点击事件2
        self.btn_calculate.clicked.connect(self.calculate)#解释:按钮点击事件3
        #self.table.cellChanged.connect(self.save_edit)#解释:表格单元格内容改变事件3

        # 布局
        layout = QVBoxLayout()#解释:垂直布局
        layout.addWidget(QLabel("地质参数输入："))#解释QLabel:标签
        layout.addWidget(self.param1)
        layout.addWidget(self.param2)
        layout.addWidget(self.btn_calculate)
        layout.addWidget(self.btn_import)#解释:按钮2
        layout.addWidget(QLabel("数据表格："))
        layout.addWidget(self.table)
        self.setLayout(layout)
        self.setWindowTitle("地质探测系统 v0.1")



if __name__ == "__main__":
    app = QApplication(sys.argv)#解释:创建应用程序
    ex = GeoApp()#解释:创建窗口
    ex.show()#解释:显示窗口
    # sys.exit(app.exec_())#解释:app.exec_()是应用程序的主循环，sys.exit()能确保主循环安全退出
    sys.exit(app.exec())  # Explanation: app.exec() is the main loop of the application, and sys.exit() ensures the main loop exits safely.